In the most general terms, an adaptive program is a program in which changes in input are automatically propagated to the output. That is to say, the output reflects changes in input values without having to rerun the whole program, and only those parts affected by the changes are re-evaluated. The advent of multi-core processing technologies enables parallel processing of different kinds of applications, many of which often require a “divide and conquer” approach.
For applications such as video, vision, graphics, audio, physical simulation, gaming, and mining, such parallelism allows the program to meet application speed requirements and take advantage of faster multi-core technologies. Adaptive programming is especially useful in such multi-core processor systems and has been shown to significantly improve the running time of such “divide and conquer” style methods. Current approaches to adaptive programs have mainly been explored in the context of functional languages and the approaches have been tailored to uni-processor based sequential execution methods. Efforts to date to manage adaptive programming processes have been exclusively serial in nature and have lacked advances in concurrent or parallel adaptive programming.
This disclosure presents primitives that enable a parallelizable approach to adaptive programming in imperative (non-declarative) languages. This disclosure also presents methods and mechanisms that allow one to efficiently perform change propagation in a parallel process, as in multi-core processors, enabling effective optimization of data parallelism for multi-core architecture, which will further enable and promote parallel software development.
Although the following detailed description will proceed with reference being made to illustrative embodiments, many alternatives, modifications, and variations thereof will be apparent to those skilled in the art. Accordingly, it is intended that the claimed subject matter be viewed broadly.